# -*- encoding=utf8 -*-
"""
RedFlag-TC0000112  （拍摄进入装饰页）滤镜功能检查
检查滤镜页面右侧图标个数场景
检查滤镜工具栏关闭功能场景
检查滤镜关闭功能场景
检查滤镜各参数默认值场景
"""
__author__ = "ldm"

import sys
import os
import yaml

# 获取当前脚本所在目录.py
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取上级目录.air
parent_dir = os.path.dirname(current_dir)
# 获取上级目录air
grandparent_dir = os.path.dirname(parent_dir)
# 获取和air目录平级的conf、testcase目录路径
conf_dir = os.path.join(grandparent_dir, 'conf')
testcase_dir = os.path.join(grandparent_dir, 'testcase')
# 将conf、testcase目录添加到sys.path
sys.path.append(conf_dir)
sys.path.append(testcase_dir)

from PageFunction import CameraVideoShooter
from elements import *

auto_setup(__file__)
shooter = CameraVideoShooter()


log("--------------------------------检查滤镜页面右侧图标个数场景--------------------------------------")
"""
拍摄视频进入装饰页
点击滤镜
获取元素数量
断言
"""

shooter.enter_photography_decoration_page()
shooter.click_element(decoration_page_filter_function)
text = shooter.get_child_count(decoration_page_sidebar)
shooter.assert_texts_equal(text, 0, "断言失败，预期值与实际值不匹配")

log("--------------------------------检查滤镜工具栏关闭功能场景--------------------------------------")
"""
点击空白处
断言
"""

touch((0.45,0.4))
sleep(1.0)
shooter.assert_element_not_exists(decoration_page_filter_toolbar, "断言失败，预期元素出现")

log("--------------------------------检查滤镜关闭功能场景--------------------------------------")
"""
点击滤镜
点击初心
点击关闭滤镜按钮
断言
"""

sleep(1.0)
shooter.click_element(decoration_page_filter_function)
shooter.click_element(decoration_page_filter_original_aspiration)
shooter.click_element(decoration_page_filter_clean)
shooter.assert_element_not_exists(poco("cn.migu.video.clip.walle:id/seekbar"), "断言失败，预期元素出现")


log("-----------------------------封装点击滤镜操作-------------------------------------")
def apply_filter(category, filter_name):
    """
    通过传入的滤镜分类及滤镜名称，定位到元素
    判断元素是否存在，存在True就点击，如果不存在False则进行滑动再进行点击操作
    获取断言文本
    断言
    打印成功日志
    :param category: 滤镜分类名称
    :param filter_name: 滤镜名称
    :param should_slide: 是否需要滑动操作，默认为False
    """
    category_element = poco(text=category)
    filter_element = poco(text=filter_name)

    shooter.click_element(category_element)
    shooter.click_element(filter_element)

    filter_text = shooter.get_element_text(poco("cn.migu.video.clip.walle:id/currentprogress"))
    shooter.assert_texts_equal(filter_text, "80", "断言失败，预期参数与实际展示参数不符合")
    log(f"{filter_name} 滤镜应用成功")

log("-----------------------------应用所有滤镜效果-------------------------------------")
"""
进入相机拍摄
点击滤镜
拼接yaml文件路径
判断是否找到yaml文件中的数据，如果找到则加载内容到data变量，如果没有找到记录错误并抛出异常
定义列表中包含需要滑动的滤镜名称
遍历yaml文件中的滤镜分类信息，从分类信息提取分类系节点
从滤镜中提取到节点名称
"""

# 读取 YAML 文件
yaml_file_path = os.path.join(grandparent_dir, 'conf', 'TC000032_filter_element_positioning.yaml')
try:
    with open(yaml_file_path, 'r', encoding='utf-8') as file:
        data = yaml.safe_load(file)
except FileNotFoundError:
    log(f"错误：未找到文件 {yaml_file_path}，请检查文件路径是否正确。")
    stop_app(UGC_package_name)
    raise

# 遍历从YAML文件中加载的滤镜分类信息
for category_info in data['filter_elements']:
    # 从分类信息中提取滤镜分类名称
    category = category_info['category']
    # 遍历该分类下的所有滤镜节点信息
    for node in category_info['nodes']:
        # 从节点信息中提取滤镜名称
        filter_name = node['text']
        # 调用apply_filter方法，应用当前滤镜并进行断言
        apply_filter(category, filter_name)

# 关闭应用
stop_app(UGC_package_name)